import { mapServer } from "../server";

export class Point {
    /**
     * 更新线要素
     * @param {Object} options
     * @param {Array} options.position 点要素的坐标数组，[x,y]
     * @param {Array} options.attr 点要素的属性数组，[{name:"name",value:"value",type:"string"}]
     * @param {Object} options.service 地图服务配置
     * @param {Object} options.docLayer 地图文档图层对象
     */
    static add({ position, attr, service, docLayer }) {
        //创建mapgis点数据 geometry + style + attribute
        //1.1设置当前点要素的几何信息
        //创建一个点形状，描述点形状的几何信息
        var gpoint = new Zondy.Object.GPoint(position[0], position[1]); //createPoint();
        var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] });
        //1.2样式信息
        //描述点要素的符号参数信息
        var pointInfo = new Zondy.Object.CPointInfo({
            Angle: 0, //角度
            Color: 6, //颜色
            Space: 0, //间距
            SymHeight: 5, //符号高度
            SymID: 21, //符号编号
            SymWidth: 5, //符号宽度
        });
        //设置当前点要素的图形参数信息
        var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
            /* 1-Point 2-LineString 3-Polygon */
            InfoType: 1, //图形类型
            PntInfo: pointInfo, //符号参数信息
        });
        //1.3设置当前点要素的属性信息
        var attValue = attr.map((item) => item.value);

        //2.创建mapgis要素集 FeatureSet(数据源)
        //创建一个要素
        var feature = new Zondy.Object.Feature({
            fGeom: fGeom, //几何信息
            GraphicInfo: webGraphicInfo, //图形信息(样式)
            AttValue: attValue, //属性信息
        });
        //设置要素为点要素
        feature.setFType(1);
        //创建一个要素数据集
        var featureSet = new Zondy.Object.FeatureSet();
        featureSet.clear();
        //设置要素集的属性结构：字段
        var cAttStruct = new Zondy.Object.CAttStruct({
            FldName: attr.map((item) => item.name), //字段名称
            FldNumber: attr.length, //字段个数
            FldType: attr.map((item) => item.type), //字段类型，映射关系
        });
        featureSet.AttStruct = cAttStruct;
        //添加要素到要素数据集
        featureSet.addFeature(feature);
        //3.调用mapgis服务添加点数据
        //创建一个编辑服务类
        var editService = new Zondy.Service.EditDocFeature(
            service.docName, //IGServer所在的服务器地址
            service.layerId, //图层索引
            mapServer, //IGServer的地址和端口号，默认为本地地址和端口号
        );
        //执行添加点要素功能
        editService.add(featureSet, this.onPntSuccess(docLayer));
    }

    /**
     * 删除线要素
     * @param {Object} options
     * @param {Array} options.position 点要素的坐标数组，[x,y]
     * @param {Array} options.attr 点要素的属性数组，[{name:"name",value:"value",type:"string"}]
     * @param {Array} options.featureIds 要删除的要素id数组
     * @param {Object} options.service 地图服务配置
     * @param {Object} options.docLayer 地图文档图层对象
     */
    static update({ position, attr, service, featureIds, docLayer, color }) {
        //获取当前选择的要素编号

        //创建一个点形状，描述点形状的几何信息

        //如果没有获取到子图符号，则直接返回

        //设置添加点要素的图形参数信息
        var pointInfo = new Zondy.Object.CPointInfo({
            Angle: 0,
            Color: color,
            Space: 0,
            SymHeight: 5,
            SymID: 21,
            SymWidth: 5,
        });
        //设置当前点要素的图形参数信息
        var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
            InfoType: 1,
            PntInfo: pointInfo,
        });

        //设置添加点要素的属性信息
        var attValue = attr.map((item) => item.value);
        // var attValue = [
        //     "SJ20241011000000",
        //     "碰撞",
        //     3,
        //     "2024.10.11 00:00:00",
        //     "sad",
        //     "asdas",
        //     "asd",
        //     2,
        // ];

        //创建一个点要素
        var newFeature = new Zondy.Object.Feature({
            // fGeom: fGeom, //不修改点的几何信息
            GraphicInfo: webGraphicInfo,//不修改点的图形信息
            AttValue: attValue, //修改点的属性信息
        });
        //设置要素为点要素
        newFeature.setFType(1);
        newFeature.setFID(featureIds[0]); //设置要素编号

        //创建一个点要素数据集
        var featureSet = new Zondy.Object.FeatureSet();
        //设置属性结构
        var cAttStruct = new Zondy.Object.CAttStruct({
            FldName: attr.map((item) => item.name),
            FldNumber: attr.length,
            FldType: attr.map((item) => item.type),
        });
        featureSet.AttStruct = cAttStruct;
        //添加要素到要素数据集
        featureSet.addFeature(newFeature);

        //创建一个编辑服务类
        var editService = new Zondy.Service.EditDocFeature(
            service.docName,
            service.layerId,
            mapServer,
        );
        editService.update(featureSet, this.onPntSuccess(docLayer));
    }

    static onPntSuccess(layer) {
        return function (data) {
            if (data.succeed) {
                // console.log("操作点要素成功！");
                layer.refresh();
            } else {
                // console.log("操作点要素失败！");
            }
        };
    }
}
